package com.zhongyouyun.utils;

import org.springframework.transaction.annotation.Transactional;

public class DigitsUtils {
    // 32个字符，用来表示32进制
    public  static char[] digits = {
            '0', '1', '2', '3', '4', '5',
            '6', '7', '8', '9', 'A', 'B',
            'C', 'D', 'E', 'F', 'G', 'H',
            'J', 'K', 'L', 'M', 'N', 'P',
            'Q', 'R', 'T', 'U', 'V', 'W',
            'X', 'Y', 'a', 'b', 'c', 'd',
            'e', 'f', 'g', 'h', 'j', 'k',
            'l', 'm', 'n', 'p', 'q', 'r',
            't', 'u', 'v', 'w', 'x', 'y'
    };

    /**
     * long类型转为32进制，指定了使用的字符，参考Long.toUnsignedString0
     *
     * @param val
     * @return
     */
    public static String digits(long val) {
        // 32=2^5=二进制100000
        int shift = 12;
        // numberOfLeadingZeros 获取long值从高位连续为0的个数，比如val=0，则返回64
        // 此处mag=long值二进制减去高位0之后的长度
        System.out.println(Long.SIZE);
        System.out.println(Long.numberOfLeadingZeros(val));
        int mag = Long.SIZE - Long.numberOfLeadingZeros(val);
        System.out.println(mag);
        int len = Math.max(((mag + (shift - 1)) / shift), 1);
        System.out.println(len);
        char[] buf = new char[len];
        do {
            System.out.println(len);
            // &64相当于%63
            System.out.println(len);
            System.out.println("-----------------"+val);
            buf[--len] = digits[((int) val) & 53];
            val >>>= shift;

        } while (val != 0 && len > 0);
        return new String(buf);
    }

    public static void main(String[] args) {
        System.out.println( DigitsUtils. digits(1627968252111650817L));
    }
}
